DMSを使ったデータベース移行を試してみた
このたびの平成30年北海道胆振東部地震被害により被災された皆さまへ 心よりお見舞い申し上げます。
はじめに
こんにちは、吉井です。 今回は AWS Database Migration Service の導入を題材にします。
AWS Database Migration Service とは
Database Migration Service (以下 DMS) はその名の通りデータベースのデータ移行を支援するサービスです。
オンプレミス~AWS間、オンプレミス~オンプレミス間のデータ移行を支援します。
(AWS~AWS間も技術的には可能ですが、これは別サービスを選択したいところです)
クラウドシフトしたサーバーへのデータ移行、検証目的でのデータレプリケーション、遠隔地バックアップなどに活用出来ると思います。
DMSの仕組み
DMSは、
● Replication Instance (データレプリケーションを実行するインスタンス)
● Replication Task (データレプリケーションの実行単位)
● Source Endpoint (ソースデータベースへの接続定義)
● Target Endpoint (ターゲットデータベースへの接続定義)
で構成されます。
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/Welcome.html より抜粋
レプリケーション方法
3パターンのレプリケーション方法が考えられます。
方法 | 説明 |
---|---|
全ロード | ソースデータベースからターゲットデータベースへ指定したテーブルデータがそのまま移行されます。 |
全ロード + CDC | ソースで変更をキャプチャしながら、全ロードが実行されます。 全ロードが完了すると、キャプチャされた変更がターゲットにレプリケーションされます。 最終的に、変更のレプリケーションは安定した状態に到達します。 |
CDC のみ | ネイティブのエクポート/インポートツールで一括ロードした後に、DMSは差分のみをレプリケーションします。 |
対応製品
DMSは数多くのデータベースをエンドポイントとして利用出来ます。
自身が管理しているデータベースが対応しているか否かはユーザーガイドを確認してください。
ユーザーガイド AWS Database Migration Service のソース
ユーザーガイド AWS Database Migration Service のターゲット
環境構築
それでは環境構築をしていきます。
AWSマネジメントコンソールへログインし、DMSを開きます。
サブネットグループの作成
サブネットグループを作ります。
左側メニューから「サブネットグループ」をクリックしサブネットグループを作成します。
Replication InstanceをMulti-AZ構成にするのがベストプラクティスです。
Replication Instance の作成
Replication Instance を作成します。
左側メニューから「レプリケーションインスタンス」をクリックし Replication Instance を作成します。
設定項目を埋めていきます。
設定項目 | 説明 |
---|---|
名前 | 管理しやすい名前を記入 |
説明 | 何のためのインスタンスなのか一見して判断出来る説明を記入 |
インスタンスクラス | 十分な処理能力のあるインスタンスタイプを選択 選択に悩む場合はテストを繰り返して決定します |
エンジンバージョン | 通常は最新を選択 |
VPC | Replication Instanceが所属するVPCを選択 |
マルチAZ | はい がベストプラクティス |
パブリックアクセス可能 | ソース/ターゲットデータベースからインターネット経由でReplication Instanceへ接続する場合はチェックを入れる |
アドバンスト
設定項目 | 説明 |
---|---|
割り当てられたストレージ | ログファイルをキャッシュされたトランザクションのために使います ソースデータベースの特性に合わせてサイズを決定 まずはデフォルトで試行して増やしていく |
レプリケーションサブネットグループ | 前の手順で作成したサブネットグループを選択 |
アベイラビリティゾーン | ソースデータベースが所属しているアベイラビリティゾーンを指定 |
VPCセキュリティグループ | Replication Instanceに紐付けるセキュリティグループを選択 |
KMSマスターキー | 暗号化に使用するキーを指定 |
メンテナンス
設定項目 | 説明 |
---|---|
マイナーバージョン自動アップグレード | チェックを入れると Replication Instance に対してマイナーエンジンアップグレードが適用されます |
メンテナンスウィンドウ | マイナーエンジンアップグレードが行われる時間帯を指定(UTC |
設定項目を埋めて作成をします。
少々待つと Replication Instance のステータスが「利用可能」に変わります。
エンドポイントの作成
Replication Instance からデータベースへ接続するためのエンドポイントを作成します。
ソースデータベース、ターゲットデータベースの2つ分必要です。
左側メニューから「エンドポイント」をクリックしエンドポイントを作成します。
設定項目を埋めていきます。
設定項目 | 説明 |
---|---|
エンドポイントタイプ | ソース または ターゲット を選択 |
RDS DBインスタンスの選択 | エンドポイントが RDS の場合はチェック |
エンドポイント識別子 | 管理しやすい識別子を記入 |
ソースエンジン | エンドポイントのデータベースタイプを選択 |
サーバー名 | エンドポイントのIPアドレスやFQDNを記入 |
ポート | エンドポイントデータベースのポート番号を記入 |
SSLモード | エンドポイントとの接続を暗号化する場合はSSLモードを選択 |
ユーザー名 | エンドポイントデータベースのユーザー名を記入 |
パスワード | エンドポイントデータベースのパスワードを記入 |
データベース名 | エンドポイントデータベースのデータベース名を記入 |
エンドポイント接続のテスト
設定項目 | 説明 |
---|---|
VPC | レプリケーションを実行するVPCを選択 |
レプリケーションインスタンス | 上の手順で作成した Replication Instance を選択 |
テストの実行ボタンをクリックして接続テストを実行します。
失敗した場合は、上の設定項目に記入した内容、セキュリティグループ、エンドポイント側のファイアウォール設定、純粋なネットワーク疎通などを確認します。
ソース、ターゲット共にエンドポイントを作成します。
タスクの作成
レプリケーションを行うためのタスクを作成します。
左側メニューから「タスク」をクリックしてタスクを作成します。
設定項目を埋めていきます。
設定項目 | 説明 |
---|---|
タスク名 | 管理しやすいタスク名を記入 |
レプリケーションインスタンス | 上の手順で作成した Replication Instance を選択 |
ソースエンドポイント | 上の手順で作成したソースエンドポイントを選択 |
ターゲットエンドポイント | 上の手順で作成したターゲットエンドポイントを選択 |
移行タイプ | 全ロードする場合は「既存のデータを移行する」を選択 CDCの場合は「データ変更のみをレプリケートする」を選択 |
作成時にタスクを開始 | チェックを入れるとタスク作成後にタスクが開始される |
タスク設定
設定項目 | 説明 |
---|---|
ターゲットテーブル作成モード | 何もしない - ターゲットにテーブルが存在することが前提です。データは Insert されます。 ターゲット上のテーブルのDROP - ターゲットのテーブルを Drop → 再作成してからデータをロードします。 TRUNCATE - ターゲットテーブルを Truncate してからデータをロードします。 |
レプリケーションにLOB列を含める | LOB列をレプリケーション対象に含めるかどうかを選択 |
最大LOBサイズ | 制限付きLOBモードを選択した場合のサイズ |
検証の有効化 | 有効にするとデータが確実に移行されることを検証します |
ロギングの有効 | CloudWatch ログにプロセス状況を記録 |
テーブルマッピング
レプリケーション対象とするスキーマとテーブルを指定します。
画面例は SQL Server のマッピングです。
タスクの完了
タスク画面に戻りステータスを監視します。
「ロード完了」となれば成功です。
CloudWatch メトリックの監視
レプリケーション中に最低限監視しておく CloudWatch メトリックです。
レプリケーションが異常終了しないように監視しておく、転ばぬ先の杖ですね。
監視するメトリック | 説明 |
---|---|
CPUUtilization | CPU使用率。高い場合はインスタンスタイプをスケールアップ |
FreeableMemory | 空きメモリ。空きが少ない場合はインスタンスタイプをスケールアップ |
SwapUsage | GB単位でスワップしていたらインスタンスタイプをスケールアップ |
FreeStorageSpace | Replication Instance のストレージを増やす、または、ソースからの読み取りを調整 |
NetworkTrasmitThroughput | ネットワーク帯域が不足した場合はインスタンスの分割、ソースからの読み取りを調整 |
NetworkReceiveThroughput | ネットワーク帯域が不足した場合はインスタンスの分割、ソースからの読み取りを調整 |
制限
全てのデータベースが無条件でレプリケーション出来るわけではありません。
ソース/ターゲットデータベースの制限事項、前提条件は予め調べておきます。
ユーザーガイド データ移行のソース